﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Irendil.controls
{
    /// <summary>
    /// Classe/controllo composto che implementa una barra con tutti gli elementi di filtraggio più comuni, oltre
    /// ai vari metodi costruttori e accessori a corredo
    /// </summary>
    public partial class filterBar : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            
        }

        /// <summary>
        /// Metodo che imposta brevemente la data odierna per tutti i filtri di ricerca
        /// </summary>
        public void setTodayDate()
        {
            // Ottengo la data odierna
            DateTime dateTime = DateTime.Now.Date;
            fromDateTextBox.Text = dateTime.ToShortDateString();
            toDateTextBox.Text = dateTime.ToShortDateString();
        }

        /// <summary>
        /// Metodo che imposta la data nella casella di filtraggio opportuna
        /// </summary>
        /// <param name="dateTime">Oggetto dateTime da impostare</param>
        public void setFromDate(DateTime dateTime)
        {
            // Controllo il valore impostato
            if (dateTime != null && dateTime != DateTime.MinValue)
            {
                fromDateTextBox.Text = dateTime.ToShortDateString();
            }
        }

        /// <summary>
        /// Metodo che imposta la data nella casella di filtraggio opportuna
        /// </summary>
        /// <param name="dateTime">Oggetto dateTime da impostare</param>
        public void setToDate(DateTime dateTime)
        {
            // Controllo il valore impostato
            if (dateTime != null && dateTime != DateTime.MinValue)
            {
                toDateTextBox.Text = dateTime.ToShortDateString();
            }
        }

        /// <summary>
        /// Metodo che ritorna la data dalla casella di filtraggio opportuna
        /// </summary>
        /// <param name="dateTime">Oggetto dateTime selezionato/MinValue in caso di mancante</param>
        public DateTime getFromDate()
        {
            // Poiché faccio numerose operazioni che potrebbero generare eccezioni
            // le gestisco in modo grezzo ma tutte
            try
            {
                // Istanzio variabili di appoggio
                DateTime dateTime;
                String fromDateStr = fromDateTextBox.Text;
                // Controllo che il valore impostato sulla textbox non sia null
                if (fromDateStr != null && fromDateStr != "")
                {
                    String[] fromDateArray = fromDateStr.Split('/');
                    // Controllo che il valore presente in textbox sia formattato/splittato correttamente
                    if (fromDateArray.Length == 3)
                    {
                        // Creo l'oggetto dateTime dalla data impostata sul textBox
                        dateTime = new DateTime(Convert.ToInt32(fromDateArray[2]),
                            Convert.ToInt32(fromDateArray[1]),
                            Convert.ToInt32(fromDateArray[0]),00,00,00);
                    }
                    else
                    {
                        // Creo istanza di default
                        dateTime = DateTime.MinValue;
                    }

                }
                else
                {
                    // Creo istanza di default
                    dateTime = DateTime.MinValue;
                }

                return dateTime;
            }
            catch (Exception)
            {
                // Creo istanza di default
                DateTime dateTime = DateTime.MinValue;
                return dateTime;
            }
            
        }

        /// <summary>
        /// Metodo che ritorna la data dalla casella di filtraggio opportuna
        /// </summary>
        /// <param name="dateTime">Oggetto dateTime selezionato/MinValue in caso di mancante</param>
        public DateTime getToDate()
        {
            // Poiché faccio numerose operazioni che potrebbero generare eccezioni
            // le gestisco in modo grezzo ma tutte
            try
            {
                // Istanzio variabili di appoggio
                DateTime dateTime;
                String toDateStr = toDateTextBox.Text;
                // Controllo che il valore impostato sulla textbox non sia null
                if (toDateStr != null && toDateStr != "")
                {
                    String[] toDateArray = toDateStr.Split('/');
                    // Controllo che il valore presente in textbox sia formattato/splittato correttamente
                    if (toDateArray.Length == 3)
                    {
                        // Creo l'oggetto dateTime dalla data impostata sul textBox
                        dateTime = new DateTime(Convert.ToInt32(toDateArray[2]),
                            Convert.ToInt32(toDateArray[1]),
                            Convert.ToInt32(toDateArray[0]), 23, 59, 59);
                    }
                    else
                    {
                        // Creo istanza di default
                        dateTime = DateTime.MinValue;
                    }

                }
                else
                {
                    // Creo istanza di default
                    dateTime = DateTime.MinValue;
                }

                return dateTime;
            }
            catch (Exception)
            {
                // Creo istanza di default
                DateTime dateTime = DateTime.MinValue;
                return dateTime;
            }

        }

        

        /// <summary>
        /// Metodo che ritorna al chiamante la ddl contenente gli host
        /// </summary>
        /// <returns>hostDropDownList</returns>
        public DropDownList getHostDropDownList()
        {
            return hostDropDownList;
        }

        /// <summary>
        /// Proprietà che ritorna il button di ricerca
        /// </summary>
        public Button SearchButton
        {
            get { return searchButton; }
        }

    }
}